home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Misc / memoPad / Source / MyObject.m < prev    next >
Text File  |  1995-05-29  |  10KB  |  650 lines

  1.  
  2. #import "MyObject.h"
  3.  
  4. @implementation MyObject
  5.  
  6.  
  7. //
  8. //
  9. // MemoPad,
  10. // Par René Guimont
  11. // Version 1,2 Mai 1994
  12. // Version 1,3 janvier 1995
  13. //     Ajouter 2 blocnotes de plus (FTP, Stuff et Varia)
  14. // Version 1,4a février 1995
  15. //    Ajout système de calendrier,
  16. //    correction cosmétique de l'application.
  17. //
  18. // Regardez dans le memu More Info pour plus de détails sur cette 
  19. // application.
  20. // Look in the menu More Info for details of this application
  21. //
  22. // This software is ANYware
  23. //
  24. //
  25.  
  26. - appDidInit:sender
  27. {
  28.  
  29.  
  30. // Running empty defaults...
  31.     memoFlag = OFF;
  32.     voiceFlag = OFF;
  33.     defaultPad = 0; 
  34.     activePad = 0; 
  35.     lastUsedPad = 0;           
  36.  
  37.  
  38. // Pour les services ces lignes sont essentielles!
  39.     
  40.     myListener = [NXApp appListener];
  41.     [myListener setServicesDelegate: self];
  42.  
  43. // Setup pour les défaults...
  44.  
  45.     if ((in = fopen("Library/MemoPad/memoDefaults", "r")) != NULL) {
  46.         temp = fscanf(in,"%1d%1d%1d%1d%s%s", &memoFlag, &voiceFlag, &defaultPad, &lastUsedPad, memoSound, voiceSound );
  47.         fclose(in);
  48.  
  49.     error = [templateTexte openRTFDFrom:"Library/MemoPad/template.rtfd"];
  50.  
  51.         [memoSoundPath setStringValue:memoSound];
  52.         [voiceSoundPath setStringValue:voiceSound];
  53.  
  54.         if (voiceFlag == ON)        
  55.             temp = SNDPlaySoundfile(voiceSound,6);
  56.         }
  57.  
  58.     if (defaultPad == 9) 
  59.         activePad = lastUsedPad;
  60.     else
  61.         activePad = defaultPad;
  62.  
  63.  
  64.     [boutonMemo selectCellWithTag:memoFlag];                        
  65.     [boutonVoice selectCellWithTag:voiceFlag];
  66.     [defaultPadSelector selectCellWithTag:defaultPad];
  67.     [padSelector selectCellWithTag:activePad];
  68.  
  69.     tempPad = activePad;
  70.     [self selectPadNumber:self];
  71.  
  72.     error = [mainWindow setFrameUsingName:"WindowFrameMemoPad"];
  73.     [self loadPad:self];
  74.  
  75.     [self calculeDate:self];
  76.     
  77.     jourCourant = jourInt;
  78.     moisCourant = moisInt;
  79.     anneeCourant = anInt;
  80.   
  81.       [self setMainCalendar:self];
  82.       [self findTodayDate:self];
  83.     [self findTodayMemo:self]; 
  84.     
  85.     [yearSelector setNextText:yearSelector];
  86.  
  87.     [pad setSel:0:0];     // Installe un  curseur dans le scrollView
  88.     [mainWindow orderFront:self];
  89.  
  90.     return self;
  91. }
  92.  
  93. - appWillTerminate:sender
  94. {
  95.     [self savePad:self];
  96.     [mainWindow saveFrameUsingName:"WindowFrameMemoPad"];
  97.  
  98.     if (defaultPad == 9)               // Last pad used flag...
  99.         [self saveDefault:self];
  100.     
  101.     return self;
  102.  
  103. }
  104.  
  105. - setMainCalendar:sender
  106. {    
  107.     // Local Variables
  108.     FILE *calCmd;
  109.     char c, buff[512], *pbuff;
  110.     
  111.     sprintf( buff, "cal %d %d", moisInt, anneeInt );
  112.     if ( (calCmd=popen(buff, "r")) == NULL )  {
  113.         [calendrier setSel:0:0];        
  114.         [calendrier replaceSel:"Can't build calendar!"];
  115.         }
  116.     else {
  117.         pbuff = buff;
  118.         while( (c=fgetc(calCmd)) != EOF )
  119.             *(pbuff++)=c;
  120.         *pbuff='\0';
  121.         pclose(calCmd);
  122.         [calendrier setSel:0:0];        
  123.         [calendrier replaceSel:buff];
  124.         }
  125.  
  126.     return self;
  127. }
  128.  
  129.  
  130. - findTodayDate:sender
  131. {
  132.  
  133.     if ([calendrier findText:journee 
  134.                  ignoreCase:YES 
  135.                   backwards:NO 
  136.                        wrap:YES] == YES);
  137.  
  138.     return self;    
  139. }
  140.  
  141.  
  142. - findTodayMemo:sender
  143. {
  144.     if ([pad findText:dateCourante
  145.                ignoreCase:YES 
  146.                 backwards:NO 
  147.                      wrap:YES] == YES) 
  148.         if (memoFlag == ON)
  149.             temp = SNDPlaySoundfile(memoSound,5);        
  150.  
  151.     return self;
  152. }
  153.  
  154.  
  155. - currentMonth:sender
  156. {
  157.     moisInt = moisCourant;
  158.     anInt = anneeCourant;
  159.  
  160.     [self calendar:self];
  161.     
  162.     return self;
  163.     
  164. }
  165.  
  166.  
  167. // This method builds the proper calendar in the window
  168. - calendar:sender
  169. {
  170.  
  171.     // Local Variables
  172.     FILE *calCmd;
  173.     char c, buff[512], *pbuff;
  174.     int tempMonth, tempYear;
  175.     
  176.     sprintf( buff, "cal %d %d", moisInt, anneeInt );
  177.     if ( (calCmd=popen(buff, "r")) == NULL )
  178.         [calView setStringValue:"Can't build calendar!"];
  179.     else {
  180.         pbuff = buff;
  181.         while( (c=fgetc(calCmd)) != EOF )
  182.             *(pbuff++)=c;
  183.         *pbuff='\0';
  184.         pclose(calCmd);
  185.         [calView setStringValue:buff];
  186.  
  187.         }
  188.  
  189.  
  190. //    [[monthSelector window] selectCellWithTag:moisInt];
  191.  
  192.  
  193.  
  194. // Présente le mois d'avant le mois courant...
  195.  
  196.     if (moisInt > 1)  {
  197.         tempMonth = moisInt - 1;
  198.         tempYear = anneeInt;
  199.         }
  200.     else  {
  201.         tempMonth = 12;
  202.         tempYear = anneeInt - 1;
  203.         }
  204.  
  205.     sprintf( buff, "cal %d %d", tempMonth, tempYear );
  206.     if ( (calCmd=popen(buff, "r")) == NULL )
  207.         [calView1 setStringValue:"Can't build calendar!"];
  208.     else {
  209.         pbuff = buff;
  210.         while( (c=fgetc(calCmd)) != EOF )
  211.             *(pbuff++)=c;
  212.         *pbuff='\0';
  213.         pclose(calCmd);
  214.         [calView1 setStringValue:buff];
  215.  
  216.         }
  217.  
  218. // Présente le mois suivant le mois courant...
  219.  
  220.     if (moisInt < 12)  {
  221.         tempMonth = moisInt + 1;
  222.         tempYear = anneeInt;
  223.         }
  224.     else  {
  225.         tempMonth = 1;
  226.         tempYear = anneeInt + 1;
  227.         }
  228.  
  229.     sprintf( buff, "cal %d %d", tempMonth, tempYear );
  230.     if ( (calCmd=popen(buff, "r")) == NULL )
  231.         [calView2 setStringValue:"Can't build calendar!"];
  232.     else {
  233.         pbuff = buff;
  234.         while( (c=fgetc(calCmd)) != EOF )
  235.             *(pbuff++)=c;
  236.         *pbuff='\0';
  237.         pclose(calCmd);
  238.         [calView2 setStringValue:buff];
  239.  
  240.         }
  241.  
  242.      [calView display];
  243.      [calView1 display];
  244.      [calView2 display];
  245.  
  246.  
  247.     [calendarPanel makeKeyAndOrderFront:NULL];
  248.  
  249.     return self;
  250. }
  251.  
  252.  
  253. - calculeDate:sender
  254. {
  255.     long time(), tmpTime;
  256.     struct tm *tm, *localtime();
  257.     tmpTime = time(0);
  258.     tm = localtime( &tmpTime );
  259.     
  260.     jourInt = (tm->tm_mday);
  261.     moisInt = (tm->tm_mon+1);
  262.     anInt = (tm->tm_year);
  263.     anneeInt = (1900+tm->tm_year);
  264.     
  265.     if (moisInt <10)
  266.       sprintf(mois, "0%d", moisInt);
  267.     else
  268.       sprintf(mois, "%d", moisInt);
  269.  
  270.     if (jourInt <10)
  271.       sprintf(jour, "0%d", jourInt);
  272.     else
  273.       sprintf(jour, "%d", jourInt);
  274.  
  275.     sprintf(an, "%d", anInt);
  276.  
  277.     sprintf(journee, " %d ", jourInt);
  278.  
  279.  
  280.     strcat(dateCourante, an);
  281.     strcat(dateCourante, mois);
  282.     strcat(dateCourante, jour);
  283.  
  284.     return self;
  285.     
  286. }
  287.  
  288.  
  289. - moisSuivant:sender
  290. {
  291.  
  292.     if (moisInt < 12)
  293.         moisInt++;
  294.     else    {
  295.         anneeInt++;
  296.         moisInt = 1;
  297.         }
  298.     
  299.     [self calendar:self];
  300.  
  301.     return self;
  302. }
  303.  
  304.  
  305. - moisPrecedent:sender
  306. {
  307.     if (moisInt > 1)
  308.         moisInt--;
  309.     else    {
  310.         anneeInt--;
  311.         moisInt = 12;
  312.         }
  313.     
  314.     [self calendar:self];
  315.  
  316.     return self;
  317. }
  318.  
  319. - selectMonth:sender
  320. {
  321.     moisInt = [[sender selectedCell] tag];
  322.         
  323.     [self calendar:self];
  324.  
  325.     return self;
  326. }
  327.  
  328.  
  329. - selectYear:sender
  330. {
  331.     anneeInt = [yearSelector intValue];
  332.  
  333.     if (anneeInt > 0 || anneeInt < 10000)  {
  334.         [self calendar:self];
  335. //        [yearSelector setSel:0:0];
  336.         }
  337.     
  338.     return self;
  339. }
  340.  
  341.  
  342. - openWindow:sender
  343. {
  344.     [mainWindow makeKeyAndOrderFront:self];
  345.  
  346.     return self;
  347. }
  348.  
  349.  
  350. - controlPad:sender
  351. {
  352.     [self savePad:self];
  353.  
  354.     activePad = [padSelector selectedTag];
  355.  
  356.     tempPad = activePad;
  357.     [self selectPadNumber:self];
  358.  
  359.     [self loadPad:self];
  360.  
  361.     return self;
  362. }
  363.  
  364. - selectPadNumber:sender
  365. {
  366.  
  367.     if (tempPad == 0)
  368.         fichier = "Library/MemoPad/note.memopad.rtfd";
  369.  
  370.     if (tempPad == 1)
  371.         fichier = "Library/MemoPad/scrap.memopad.rtfd";
  372.  
  373.     if (tempPad == 2)
  374.         fichier = "Library/MemoPad/reference.memopad.rtfd";
  375.  
  376.     if (tempPad == 3)
  377.         fichier = "Library/MemoPad/telephone.memopad.rtfd";
  378.         
  379.     if (tempPad == 4)
  380.         fichier = "Library/MemoPad/ftp.memopad.rtfd";
  381.         
  382.     if (tempPad == 5)
  383.         fichier = "Library/MemoPad/stuff.memopad.rtfd";
  384.         
  385.     if (tempPad == 6)
  386.         fichier = "Library/MemoPad/varia.memopad.rtfd";
  387.         
  388.     if (tempPad == 7)
  389.         fichier = "Library/MemoPad/clip.memopad.rtfd";
  390.     
  391.  
  392.     return self;
  393. }
  394.  
  395.  
  396.  
  397. - loadPad:sender
  398. {
  399.  
  400.     error = [pad openRTFDFrom:fichier];
  401.     [pad setSel:0:0];
  402.     
  403.     return self;
  404.  
  405. }
  406.  
  407.  
  408. - savePad:sender
  409. {
  410.     
  411.     error = [pad saveRTFDTo:fichier
  412.            removeBackup:YES
  413.            errorHandler:self];
  414.            
  415.     return self;
  416. }
  417.  
  418. - attemptOverwrite:fichier
  419. {
  420.     NXBeep();
  421.  
  422.     return self;
  423. }
  424.  
  425.  
  426.  
  427. - ShowInfoPanel:sender
  428. {
  429.       NXBeep();
  430.  
  431.     if (!infoPanel)
  432.         [NXApp loadNibSection:"infoPanel.nib" owner:self];
  433.         
  434.     [infoPanel makeKeyAndOrderFront:self];
  435.     
  436.     return self;
  437. }
  438.  
  439. - showMoreInfoPanel:sender
  440. {
  441.       NXBeep();
  442.  
  443.     if (!moreInfoPanel)
  444.         [NXApp loadNibSection:"moreInfo.nib" owner:self];
  445.         
  446.     [moreInfoPanel makeKeyAndOrderFront:self];
  447.     
  448.     return self;
  449. }
  450.  
  451.  
  452. - printPad:sender
  453. {
  454.  
  455.     [pad printPSCode:self];
  456.  
  457.     return self;
  458. }
  459.  
  460.  
  461. - showFindPanel:sender
  462. {
  463.     [findPanel makeKeyAndOrderFront:self];
  464.     [findText selectText:self];
  465.  
  466.     return self;
  467. }
  468.  
  469.  
  470. - findNext:sender
  471. {
  472.     targetText = [findText stringValue];
  473.         
  474.     if ([pad findText:targetText 
  475.                ignoreCase:YES 
  476.                 backwards:NO 
  477.                      wrap:YES] == YES);
  478.     
  479.     return self;
  480. }
  481.  
  482. - findPrevious:sender
  483. {
  484.     targetText = [findText stringValue];
  485.         
  486.     if ([pad findText:targetText
  487.                ignoreCase:YES
  488.                 backwards:YES 
  489.                      wrap:YES] == YES);
  490.         
  491.     return self;
  492. }
  493.  
  494.  
  495.  
  496. - clipStuff:(id)pasteboard userData:(const char *)userData error:(char **)msg 
  497. {
  498.     
  499.     [pasteboard types];    // pretend to check the pasteboard types
  500.  
  501.     temp = [pad textLength]; 
  502.         
  503.     [pad setSel:temp:temp];
  504.     [pad replaceSel:"\n"];
  505.  
  506.     [pad readSelectionFromPasteboard: pasteboard];
  507.  
  508.     return self;
  509. }
  510.  
  511. - autoDate:sender
  512. {
  513.  
  514.     [pad replaceSel:dateCourante];
  515.     [pad replaceSel:"\n"];
  516.  
  517.     return self;
  518.  
  519. }
  520.  
  521. - autoLine:sender
  522. {
  523.  
  524.     [pad replaceSel:"—————————————————\n"];
  525.  
  526.     return self;
  527.  
  528. }
  529.  
  530. - preference:sender
  531. {
  532.  
  533.     [preferencePanel makeKeyAndOrderFront:self];
  534.     
  535.         return self;
  536. }
  537.  
  538. - getMemoSoundPath:sender
  539. {
  540.  
  541.     const char *const types[2] = {"snd", NULL};
  542.  
  543.                    
  544.     if ([[OpenPanel new] runModalForTypes:types] == 1)  
  545.         { 
  546.         strcpy(memoSound,[[OpenPanel new] filename]);        
  547.         [memoSoundPath setStringValue:memoSound];
  548.         temp = SNDPlaySoundfile(memoSound,5);
  549.         }
  550.  
  551.  
  552.     return self;
  553. }
  554.  
  555. - getVoiceSoundPath:sender
  556. {
  557.  
  558.     const char *const types[2] = {"snd", NULL};
  559.  
  560.                    
  561.     if ([[OpenPanel new] runModalForTypes:types] == 1)  
  562.         { 
  563.         strcpy(voiceSound,[[OpenPanel new] filename]);        
  564.         [voiceSoundPath setStringValue:voiceSound];
  565.         temp = SNDPlaySoundfile(voiceSound,5);
  566.         }
  567.  
  568.  
  569.     return self;
  570. }
  571.  
  572.  
  573. - saveDefault:sender
  574. {
  575.     out = fopen("Library/MemoPad/memoDefaults", "w");
  576.  
  577.     fprintf(out,"%d%d%d%d%s\n%s",  memoFlag, voiceFlag, defaultPad, activePad, memoSound, voiceSound );
  578.     
  579.     fclose(out);
  580.  
  581.     error = [templateTexte saveRTFDTo:"Library/MemoPad/template.rtfd"
  582.            removeBackup:YES
  583.            errorHandler:self];
  584.            
  585.     return self;
  586. }
  587.  
  588. - playMemoSound:sender
  589. {
  590.     temp = SNDPlaySoundfile(memoSound,5);
  591.  
  592.     return self;
  593. }
  594.  
  595. - playVoiceSound:sender
  596. {
  597.     temp = SNDPlaySoundfile(voiceSound,5);
  598.  
  599.     return self;
  600. }
  601.  
  602. - controlMemo:sender
  603. {
  604.     memoFlag = [boutonMemo selectedTag];
  605.  
  606.     if (memoFlag == ON)
  607.         temp = SNDPlaySoundfile(memoSound,5);
  608.  
  609.     return self;
  610. }
  611.  
  612. - controlVoice:sender
  613. {
  614.     voiceFlag = [boutonVoice selectedTag];
  615.  
  616.     if (voiceFlag == ON)        
  617.         temp = SNDPlaySoundfile(voiceSound,5);
  618.  
  619.     return self;
  620. }
  621.  
  622.  
  623. - getDefaultPad:sender
  624. {
  625.     defaultPad = [defaultPadSelector selectedTag];
  626.  
  627.     return self;
  628. }
  629.  
  630. - template:sender
  631. {
  632.  
  633.     // Copie le "template" dans le clipBoard puis vers PAD.
  634.  
  635.     [templateTexte selectAll:self];
  636.     [templateTexte copy:tempBoard];
  637.     
  638. //    [pad selectAll:self];
  639.  
  640.     [pad setSel:0:0];
  641.  
  642.     [pad paste:tempBoard];
  643.     
  644.     [templateTexte selectNull];
  645.  
  646.     return self;
  647. }
  648.  
  649. @end
  650.